package cool.webstudy.admin.service.docker;

import cool.webstudy.admin.model.dto.docker.container.ContainerIdAndNameMapInfoDTO;
import cool.webstudy.admin.model.dto.docker.container.ContainerNetworkInfoDTO;
import cool.webstudy.admin.service.callback.CallBack;

import java.util.List;
import java.util.Map;

/**
 * @author 莫振双
 * @date 2025/1/1 20:46
 * @description: 容器管理
 */
public interface ContainerService {
    /**
     * @param imageInfo 镜像信息，可以是镜像ID，也可以是镜像名称
     * @param containerName 容器名称
     * @param networkName 网络名称
     * @param hostPort 主机端口
     * @param containerPort 容器端口
     * @return String 容器id
     * @description: 根据端口映射创建容器
     */
    String createContainer(String imageInfo, String containerName,String networkName,Integer hostPort, Integer containerPort);
    /**
     * @param imageInfo 镜像信息，可以是镜像ID，也可以是镜像名称
     * @param containerName 容器名称
     * @param networkName 网络名称
     * @param ip 容器IP地址
     * @return String 容器id
     * @description: 根据IP创建容器
     */
    String createContainer(String imageInfo, String containerName,String networkName,String ip);
    /**
     * @param imageInfo 镜像信息，可以是镜像ID，也可以是镜像名称
     * @param containerNames 容器名称数组
     * @param startHostPort 起始主机端口
     * @param endHostPort 截止主机端口
     * @param containerPort 容器端口
     * @return List<ContainerIdAndNameMapInfoDTO> 容器id和name映射信息实体模型
     * @description: 批量根据端口映射创建容器
     */
    List<ContainerIdAndNameMapInfoDTO> batchCreateContainer(String imageInfo, String[] containerNames,Integer startHostPort,Integer endHostPort, Integer containerPort);
    /**
     * @param imageInfo 镜像信息，可以是镜像ID，也可以是镜像名称
     * @param containerNames 容器名称数组
     * @param startIP 起始IP
     * @param endIP 截止IP
     * @return Map<String, ContainerNetworkInfoDTO> 容器名称和容器网络信息映射关系
     * @description: 批量根据IP创建容器
     */
    Map<String, ContainerNetworkInfoDTO> batchCreateContainer(String imageInfo, String[] containerNames, String startIP, String endIP);
    /**
     * @param containerIds 容器id数组
     * @return String[] 容器id
     * @description: 批量启动容器
     */
    String[] batchStartContainer(String[] containerIds);
    /**
     * @param containerIds 容器id数组
     * @return String[] 容器id
     * @description: 批量停止容器
     */
    String[] batchStopContainer(String[] containerIds);
    /**
     * @param containerIds 容器id数组
     * @return String[] 容器id
     * @description: 批量删除容器
     */
    String[] batchDeleteContainer(String[] containerIds);
    /**
     * @param containerIds 容器id数组
     * @return String[] 容器id
     * @description: 批量删除容器
     */
    String[] batchRestartContainer(String[] containerIds);
    /**
     * @param containerIds 容器id数组
     * @param srcFilePath 源文件路径
     * @param destFilePath 目标文件路径
     * @return Boolean 是否复制成功
     * @description: 批量复制文件到容器
     */
    Boolean batchCopyFileToContainer(String[] containerIds, String srcFilePath, String destFilePath);
    /**
     * @param containerIds 容器id数组
     * @param command 命令，多条命令请使用;分割
     * @param callback 回调函数
     * @description: 批量在容器中执行命令
     */
    void batchExecCommandInContainer(String[] containerIds, String command, CallBack callback);
    /**
     * @param containerId 容器id
     * @param command 命令，多条命令请使用;分割
     * @param callback 回调函数
     * @description: 在容器中执行命令
     */
    void execCommandInContainer(String containerId, String command, CallBack callback);
    /**
     * @param params 容器id和flag映射信息
     * @description: 批量刷新flag
     */
    void batchRefreshFlag(Map<String, String> params);
}
